package main

/*
i 代表第几天，j 代表第几个操作
j 从 0 开始依次为：不操作、第一次买、第一次卖、第二次买，
所以奇数 j 即买操作，偶数为卖操作
总次数就是 k * 2，加上不操作为 2 * k + 1
*/
func maxProfit188(k int, prices []int) int {
	l := len(prices)
	if l == 0 {
		return 0
	}

	dp := make([][]int, l)
	for i := range dp {
		dp[i] = make([]int, 2*k+1)
	}

	for i := 1; i < 2*k+1; i += 2 {
		dp[0][i] = -prices[0]
	}

	for i := 1; i < l; i++ {
		for j := 1; j < 2*k+1; j++ {
			if j%2 == 0 {
				dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]+prices[i])
			} else {
				dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]-prices[i])
			}
		}
	}
	return dp[l-1][2*k]
}

func max188(a, b int) int {
	if a > b {
		return a
	}
	return b
}
